home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
FROMUTS
/
UNIXLIB37B
/
src
/
unix
/
c
/
open
< prev
next >
Wrap
Text File
|
1991-10-10
|
1KB
|
74 lines
static char sccs_id[] = "@(#) open.c 1.4 "__DATE__" HJR";
/* open.c (c) Copyright 1990 H.Rogers */
#include <stdarg.h>
#include <errno.h>
#include "fcntl.h"
#include "sys/unix.h"
#include "sys/dev.h"
struct sfile __sfile[] = {
{ "tty",makedev(DEV_TTY,0) },
{ "console",makedev(DEV_TTY,0) },
{ "rs423",makedev(DEV_TTY,0) },
{ "null",makedev(DEV_NULL,0) },
{ 0,makedev(DEV_RISCOS,0) } }; /* table terminator */
char *ttyname(void) { return("/dev/tty"); }
int open(register char *file,int oflag,...)
{
register struct file *f;
va_list ap;
register int mode;
int fd;
dev_t dev;
/* __uname() is called by __fsopen() */
if (oflag & O_CREAT)
{
va_start(ap,oflag);
mode = va_arg(ap,int);
va_end(ap);
}
else
mode = 0777;
if ((fd = __fdalloc()) < 0) return(-1);
f = __u->file + fd; f->oflag = oflag;
if (file[0] == '/' && file[1] == 'd' && file[2] == 'e' &&
file[3] == 'v' && file[4] == '/')
{
register struct sfile *s = __sfile;
register char *s1,*s2;
while (s1 = s->name)
{
s2 = file + 5;
while (*s1 && *s2 && *s1 == *s2) s1++,s2++; if (*s1 == *s2) break;
s++;
}
dev = s->dev;
}
else
dev = makedev(DEV_RISCOS,0);
{
register int i;
if ((i = (*(__dev[major(dev)].open))(file,mode,f)) < 0) return(-1);
f->dev = makedev(major(dev),i);
}
f->dup = f; f->pid = __u->pid;
return(fd);
}